﻿using CodeSaude.Application.Interfaces;
using CodeSaude.Application.ViewModels;
using CodeSaude.Domain.Entities;
using CodeSaude.Web.Models;
using System;
using System.Web.Mvc;

namespace CodeSaude.Web.Controllers
{
    public class RegistroController : Controller
    {
        private readonly IProntuarioApplicationService _prontuarioApplication;

        public RegistroController(IProntuarioApplicationService prontuarioApplication)
        {
            _prontuarioApplication = prontuarioApplication;
        }

        // GET: Registro
        public ActionResult Index()
        {
            ViewBag.Title = "Registro";
            ProntuarioViewModel model = new ProntuarioViewModel();

            foreach (ProntuarioViewModel item in _prontuarioApplication.GetAll())
            {
                ProntuarioDTO prontDTO = new ProntuarioDTO();
                prontDTO.ProntuarioId = item.ProntuarioId.ToString();
                prontDTO.Atendimento = item.ProntuarioId.ToString();
                prontDTO.EscalaDor = "/images/smile-" + item.IdEscalaDor.ToString() + ".png";
                prontDTO.NomePessoa = item.NomePessoa;
                prontDTO.IdEspecialidade = item.Especialidade.EspecialidadeId.ToString();
                prontDTO.NomeEspecialidade = item.Especialidade.NomeEspecialidade;
                prontDTO.DataAtendimento = item.DataAtendimento.Value.ToString();

                if (item.DataAtendimento.HasValue)
                {
                    DateTime dt = item.DataAtendimento.Value;
                    DateTime dt1 = DateTime.Now;
                    TimeSpan duration = dt1 - dt;
                    long durationTicks = Math.Abs(duration.Ticks / TimeSpan.TicksPerMillisecond);
                    long hours = durationTicks / (1000 * 60 * 60);
                    long minutes = (durationTicks - (hours * 60 * 60 * 1000)) / (1000 * 60);

                    prontDTO.TempoEspera = hours.ToString("00") + ":" + minutes.ToString("00");
                }
                else
                {
                    prontDTO.TempoEspera = string.Empty;
                }

                prontDTO.Destino = item.Destino;
                prontDTO.Prioridade = item.Prioridade;
                model.Prontuarios.Add(prontDTO);
            }

            if (TempData["mensagem"] != null)
            {
                ViewBag.Mensagem = TempData["mensagem"] as Mensagem;
                // Mantendo o dado do TempData até a próxima leitura (requisição).
                //TempData.Keep("Mensagem");
            }

            return View(model);
        }

        public ActionResult Chamar(string id)
        {
            try
            {
                // id = idProntuario|idEspecialidade
                string[] arrayID = id.Split('|');
                int idProntuario = Convert.ToInt32(arrayID[0]);
                int idEspecialidade = Convert.ToInt32(arrayID[1]);

                ViewBag.Title = "Alterar prontuario";
                ProntuarioViewModel model = new ProntuarioViewModel();
                model = _prontuarioApplication.GetById(idProntuario, idEspecialidade);

                return View("Chamar", model);
            }
            catch (Exception ex)
            {


                throw;
            }
        }

        // GET: Registro/Details/5
        public ActionResult Details(int id)
        {
            return View();
        }

        // GET: Registro/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: Registro/Create
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        // GET: Registro/Edit/5
        public ActionResult Edit(string id)
        {
            try
            {
                // id = idProntuario|idEspecialidade
                string[] arrayID = id.Split('|');
                int idProntuario = Convert.ToInt32(arrayID[0]);
                int idEspecialidade = Convert.ToInt32(arrayID[1]);

                ViewBag.Title = "Alterar Registro";
                ProntuarioViewModel model = new ProntuarioViewModel();
                model = _prontuarioApplication.GetById(idProntuario, idEspecialidade);
                return View(model);
            }
            catch (Exception ex)
            {
                Mensagem msg = new Mensagem()
                {
                    Conteudo = string.Concat("Não foi possível carregar o registro. Detalhes: ", ex.Message),
                    tipoMensagem = TipoMensagem.ERRO
                };

                TempData["mensagem"] = msg;
                return RedirectToAction("Index");
            }
        }

        // POST: Registro/Edit/5
        [HttpPost]
        public ActionResult Edit(ProntuarioViewModel model)
        {
            try
            {
                ProntuarioViewModel prontuarioVM = null;
                if (ModelState.IsValid)
                {
                    prontuarioVM = _prontuarioApplication.GetById(model.ProntuarioId, model.IdEspecialidade);

                    if (prontuarioVM != null)
                    {
                        prontuarioVM.NomePessoa = model.NomePessoa;
                        _prontuarioApplication.Update(prontuarioVM);
                    }
                    
                    Mensagem msg = new Mensagem()
                    {
                        Conteudo = "Registro alterado com sucesso",
                        tipoMensagem = TipoMensagem.SUCESSO
                    };

                    TempData["mensagem"] = msg;
                }

                return RedirectToAction("Index");
            }
            catch(Exception ex)
            {
                Mensagem msg = new Mensagem()
                {
                    Conteudo = string.Concat("Erro ao salvar registro. Detalhes: ", ex.Message),
                    tipoMensagem = TipoMensagem.ERRO
                };

                TempData["mensagem"] = msg;
                return RedirectToAction("Index");
            }
        }

        public ActionResult Confirmar()
        {
            try
            {
                PessoaViewModel model = new PessoaViewModel();
                return View(model);
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        
    }
}
